#include "LoginForm.h"
#include "RegisterForm.h"
#include "MainWindowForm.h"
#include "MarketingForm.h"

/* Definicje ustawien bazy danych */

#define DRIVER "QSQLITE"
#define DATABASE "./media.db"
#define HOST ""
#define USER ""
#define PASSWORD ""

LoginForm::LoginForm (QWidget *parent): QDialog (parent), qvalidator (this)
{
	setupUi (this);

	connect (loginButton,SIGNAL (clicked ()),this,SLOT (logIn ()));
	connect (registerButton,SIGNAL (clicked ()),this,SLOT (registerMe ()));

  /* Ustawienie wyrazen regularnych dla wprowadzanych danych */
	QRegExp expression ("^[0-9,a-z,A-Z]{10,10}&");
	qvalidator.setRegExp (expression);
  
	passEdit->setValidator (&qvalidator);

}

bool LoginForm::logIn ()
{
  /* Definicja zmiennych pomocniczych */

  bool ok = true;
  bool tworzOkno = false;
  int level;

  /* Definicja okien */
  MainWindowForm *okno_glowne;
  MarketingForm *okno_marketingu;

  Dane dane;

  /* Sprawdzenie czy pola nie sa puste */
  if (passEdit->text ().length ()!=0) 
  {
    /* Przywrocenie poprawnej etykietki */
    passLabel->setText ("Haslo");
  }
  else
  {
    //TODO: Kodowanie polskich czcionek w Qt4
	  passLabel->setText ("Haslo <font color=red>*</font>");
		ok = false;
	}

	if (userEdit->text ().length ()!=0)
  {
    /* Przywrocenie poprawnej etykietki */
    userLabel->setText ("Uzytkownik");
  }
	else
  {
    //TODO: Kodowanie polskich czcionek w Qt4
    userLabel->setText ("Uzytkownik <font color=red>*</font>");
		ok = false;
  }

  /* Sprawdzenie czy pola sa poprawnie wypelnione */
  if (ok)
  {
    {
      /* Inicjalizacja bazy danych */
      QSqlDatabase db = QSqlDatabase::addDatabase (DRIVER, "qt_sql_default_connection");  
      db.setDatabaseName (DATABASE);
      db.setUserName (USER);
      db.setPassword (PASSWORD);
      db.setHostName (HOST);

      /* Sprawdzenie czy udalo sie polaczyc z baza */
      if (!db.open ())
      {
        fprintf (stderr, "Nie udalo sie polaczyc z baza danych\n");
        return false;
      }
      
      else
      {
        fprintf (stderr, "Polaczono z baza\n");
  
        QSqlQuery query;
        /* Pobranie hasla z bazy */
        query.prepare ("SELECT password FROM klienci WHERE nick = :nick");
        query.bindValue (":nick", userEdit->text ());
        query.exec ();
        query.first ();
        /* Sprawdzenie czy podane haslo sie zgadza */
        if (passEdit->text () == query.value (0).toString ())
        {
          tworzOkno = true;
          fprintf (stderr, "Logowanie poprawne!\n");
          query.prepare ("SELECT imie, nazwisko, ulica, kod, miasto, email, level, nrk FROM klienci WHERE nick = :nick");
          query.bindValue (":nick", userEdit->text ());
          query.exec ();
          query.first ();

          dane.setImie (query.value (0).toString ());
          dane.setNazwisko (query.value (1).toString ());
          dane.setUlica (query.value (2).toString ());
          dane.setKod (query.value (3).toString());
          dane.setMiasto (query.value (4).toString ());
          dane.setEmail (query.value (5).toString ());
          dane.setId (query.value (7).toInt ());

          level = query.value (6).toInt (); 

          user.setDane (dane);
        }
      }
      db.close ();
      //TODO: MainWindowForm bedzie przyjmowal jeszcze dane
    }
    QSqlDatabase::removeDatabase ("qt_sql_default_connection");
    if (tworzOkno)
    {
      /* W zaleznosci od levelu otwieramy odpowiednie okno */
      switch (level)
      {
        case 1:
          fprintf (stderr, "Tworze glowne okno\n");
          okno_glowne = new MainWindowForm (this, &user);
          okno_glowne->setVisible (true);
          tworzOkno = false;
          break;
        case 2:
          okno_marketingu = new MarketingForm (this);
          okno_marketingu->setVisible (true);
          tworzOkno = false;
          break;
      }
    } 
    return true;
  }
  return false;
}

bool LoginForm::registerMe ()
{
  RegisterForm *okno_rejestracji = new RegisterForm (this);
  okno_rejestracji->setVisible (true);
	return true;
}

